﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using Business_Entity;

namespace DAOFactory
{
    public class DAORol
    {
        public int guardaRol(string rol, string descripcion)
        {
        	try{
        		SqlCommand cmd = new SqlCommand("SEGU_REGISTRAR_ROL_T", ConnectionManager.getConnection());
        	
				cmd.CommandType = CommandType.StoredProcedure;
			
				cmd.Parameters.Add("@IDROL", SqlDbType.Char, 3);
				cmd.Parameters["@IDROL"].Value = rol;
				cmd.Parameters.Add("@DESCRIPCION", SqlDbType.Char, 18);
				cmd.Parameters["@DESCRIPCION"].Value = descripcion;
				cmd.Parameters.Add("@IDESTADO", SqlDbType.Char, 3);
				cmd.Parameters["@IDESTADO"].Value = "ACT";
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				int estadoTran;
				
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				//ConnectionManager.closeConnection();
				
				return estadoTran;			
        	}
        	catch {
        		MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return 0;
        	}
        }	
        
        public int eliminaRolPrivilegios (string idRol){
        	try{
        		SqlCommand cmd = new SqlCommand("SEGU_ELIMINAR_PRIVILEGIOXROL_T", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDROL", SqlDbType.Char, 3);
				cmd.Parameters["@IDROL"].Value = idRol;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				int estadoTran;
				
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				
				return estadoTran;	
        	} 
        	catch {
       			MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return 0;
        	}
        }
        
        public  int guardaRolPrivilegios(String rol, Boolean prr, Boolean prm, Boolean pcr, Boolean pcm, Boolean ocr, Boolean ocm, Boolean rec,
        		              Boolean cmr, Boolean cmm, Boolean pvr, Boolean pvm, Boolean fcr, Boolean fcm, Boolean svr, Boolean svm, 
        		              Boolean cir, Boolean cim, Boolean emr, Boolean emm, Boolean rea, Boolean rem, Boolean pdr, Boolean pdm, 
        		              Boolean ppr, Boolean ppm, Boolean dpr, Boolean dpm, Boolean usr, Boolean usm, Boolean ror, Boolean rom,
        		              Boolean tir, Boolean tim, Boolean epr, Boolean epm, Boolean srr, Boolean srm, Boolean prn, Boolean dsc, 
        		              Boolean rvn, Boolean adm, Boolean dmm, Boolean rvr, Boolean ucr, Boolean ucm, Boolean vlr, Boolean vlm)
        {
        	
        	int result = 1;
        		
        	//COMPRAS
        	
        	if (prr){
        		result = guardaRolPrivilegios1(rol,1,"COMP","PROV");
        		if (result==0||result==2) return result;
			}
        	if (prm){
        		result = guardaRolPrivilegios1(rol,2,"COMP","PROV");
        		if (result==0||result==2) return result;
			}
        	if (pcr){
        		result = guardaRolPrivilegios1(rol,1,"COMP","PEDC");
        		if (result==0||result==2) return result;
			}
        	if (pcm){
        		result = guardaRolPrivilegios1(rol,2,"COMP","PEDC");
        		if (result==0||result==2) return result;
			}
        	
        	if (pcm){
        		result = guardaRolPrivilegios1(rol,3,"COMP","PEDC");
        		if (result==0||result==2) return result;
			}
        	
        	if (ocr){
        		result = guardaRolPrivilegios1(rol,1,"COMP","ORDC");
        		if (result==0||result==2) return result;
			}
        	if (ocm){
        		result = guardaRolPrivilegios1(rol,2,"COMP","ORDC");
        		if (result==0||result==2) return result;
			}
        	
        	if (rec){
        		result = guardaRolPrivilegios1(rol,3,"COMP","REPC");
        		if (result==0||result==2) return result;
        	}
        	
			//VENTAS
			if (cmr){
        		result = guardaRolPrivilegios1(rol,1,"VENT","CLMA");
        		if (result==0||result==2) return result;
			}
        	if (cmm){
        		result = guardaRolPrivilegios1(rol,2,"VENT","CLMA");
        		if (result==0||result==2) return result;
        	}
        	
			if (pvr){
        		result = guardaRolPrivilegios1(rol,1,"VENT","PEDV");
        		if (result==0||result==2) return result;
			}
        	if (pvm){
        		result = guardaRolPrivilegios1(rol,2,"VENT","PEDV");
        		if (result==0||result==2) return result;
        	}
        	
			if (fcr){
        		result = guardaRolPrivilegios1(rol,1,"VENT","FLUC");
        		if (result==0||result==2) return result;
			}
        	if (fcm){
        		result = guardaRolPrivilegios1(rol,2,"VENT","FLUC");
        		if (result==0||result==2) return result;
        	}
			if (dsc){
        		result = guardaRolPrivilegios1(rol,1,"VENT","DESC");
        		if (result==0||result==2) return result;
        	}
			if (rvn){
        		result = guardaRolPrivilegios1(rol,3,"VENT","REPV");
        		if (result==0||result==2) return result;
        	}
        			
			//SERVICIOS
			if (svr){
        		result = guardaRolPrivilegios1(rol,1,"SERV","SERV");
        		if (result==0||result==2) return result;
			}
        	if (svm){
        		result = guardaRolPrivilegios1(rol,2,"SERV","SERV");
        		if (result==0||result==2) return result;
        	}
        			
			if (cir){
        		result = guardaRolPrivilegios1(rol,1,"SERV","BUSP");
        		if (result==0||result==2) return result;
			}
        	if (cim){
        		result = guardaRolPrivilegios1(rol,2,"SERV","BUSP");
        		if (result==0||result==2) return result;
        	}
			if (adm){
        		result = guardaRolPrivilegios1(rol,1,"SERV","ADOP");
        		if (result==0||result==2) return result;
			}
        	if (dmm){
        		result = guardaRolPrivilegios1(rol,1,"SERV","DADO");
        		if (result==0||result==2) return result;
        	}
        			
			//RRHH
			if (emr){
        		result = guardaRolPrivilegios1(rol,1,"RRHH","EMPL");
        		if (result==0||result==2) return result;
			}
        	if (emm){
        		result = guardaRolPrivilegios1(rol,2,"RRHH","EMPL");
        		if (result==0||result==2) return result;
        	}
        			
			if (rea){
        		result = guardaRolPrivilegios1(rol,3,"RRHH","REPA");
        		if (result==0||result==2) return result;
			}

			if (rem){
        		result = guardaRolPrivilegios1(rol,3,"RRHH","REPE");
        		if (result==0||result==2) return result;
			}
			
			//GESTION DE RECURSOS
			if (pdr){
        		result = guardaRolPrivilegios1(rol,1,"GREC","PROD");
        		if (result==0||result==2) return result;
			}
        	if (pdm){
        		result = guardaRolPrivilegios1(rol,2,"GREC","PROD");
        		if (result==0||result==2) return result;
        	}
        	if (ppr){
        		result = guardaRolPrivilegios1(rol,1,"GREC","PEDP");
        		if (result==0||result==2) return result;
			}
        	if (ppm){
        		result = guardaRolPrivilegios1(rol,2,"GREC","PEDP");
        		if (result==0||result==2) return result;
        	}
        	if (dpr){
        		result = guardaRolPrivilegios1(rol,1,"GREC","DESP");
        		if (result==0||result==2) return result;
			}
        	if (dpm){
        		result = guardaRolPrivilegios1(rol,2,"GREC","DESP");
        		if (result==0||result==2) return result;
        	}
			if (epr){
        		result = guardaRolPrivilegios1(rol,1,"GREC","ESPP");
        		if (result==0||result==2) return result;
			}
        	if (epm){
        		result = guardaRolPrivilegios1(rol,2,"GREC","ESPP");
        		if (result==0||result==2) return result;
        	}
			if (srr){
        		result = guardaRolPrivilegios1(rol,1,"GREC","SERV");
        		if (result==0||result==2) return result;
			}
        	if (srm){
        		result = guardaRolPrivilegios1(rol,2,"GREC","SERV");
        		if (result==0||result==2) return result;
        	}
        	if (rvr){
        		result = guardaRolPrivilegios1(rol,3,"GREC","REPG");
        		if (result==0||result==2) return result;
        	}		
			//SEGURIDAD
			
			if (usr){
        		result = guardaRolPrivilegios1(rol,1,"SEGU","USUA");
        		if (result==0||result==2) return result;
			}
        	if (usm){
        		result = guardaRolPrivilegios1(rol,2,"SEGU","USUA");
        		if (result==0||result==2) return result;
        	}
        	
			if (ucr){
        		result = guardaRolPrivilegios1(rol,1,"SEGU","USUC");
        		if (result==0||result==2) return result;
			}
        	if (ucm){
        		result = guardaRolPrivilegios1(rol,2,"SEGU","USUC");
        		if (result==0||result==2) return result;
        	}
			
        	if (ror){
        		result = guardaRolPrivilegios1(rol,1,"SEGU","ROLE");
        		if (result==0||result==2) return result;
			}
        	if (rom){
        		result = guardaRolPrivilegios1(rol,2,"SEGU","ROLE");
        		if (result==0||result==2) return result;
        	}
        				
			//CONFIGURACION
			if (tir){
        		result = guardaRolPrivilegios1(rol,1,"CONF","TIEN");
        		if (result==0||result==2) return result;
			}
        	if (tim){
        		result = guardaRolPrivilegios1(rol,2,"CONF","TIEN");
        		if (result==0||result==2) return result;
        	}
        	
			if (vlr){
        		result = guardaRolPrivilegios1(rol,1,"CONF","VALO");
        		if (result==0||result==2) return result;
        	}
			if (vlm){
        		result = guardaRolPrivilegios1(rol,2,"CONF","VALO");
        		if (result==0||result==2) return result;
        	}
			return result;
        	
        }
        
        private int guardaRolPrivilegios1(string rol, int priv, string modulo, string ventana){
        	try{
        		SqlCommand cmd = new SqlCommand("SEGU_REGISTRAR_ROLXPRIVILEGIO_T", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
			
				cmd.Parameters.Add("@IDROL", SqlDbType.Char,3);
				cmd.Parameters["@IDROL"].Value = rol;
				cmd.Parameters.Add("@IDPRIVILEGIO", SqlDbType.Int);
				cmd.Parameters["@IDPRIVILEGIO"].Value = priv;
				cmd.Parameters.Add("@IDMODULO", SqlDbType.Char, 4);
				cmd.Parameters["@IDMODULO"].Value = modulo;
				cmd.Parameters.Add("@IDVENTANA", SqlDbType.Char, 4);
				cmd.Parameters["@IDVENTANA"].Value = ventana;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
			
				int estadoTran;
			
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				//ConnectionManager.closeConnection();
			
				return estadoTran;
        	}
        	catch {
          		MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return 0;
        	}
        }

        public List<BERol> buscarRol(String rol, String descripcion)
		{
        	try{
        		SqlCommand cmd = new SqlCommand("SEGU_BUSCAR_ROL_T", ConnectionManager.getConnection());
        	
				cmd.CommandType = CommandType.StoredProcedure;
			
				cmd.Parameters.Add("@ROL", SqlDbType.VarChar, 3);
				cmd.Parameters["@ROL"].Value = rol;
				cmd.Parameters.Add("@DESCRIPCION", SqlDbType.VarChar, 18);
				cmd.Parameters["@DESCRIPCION"].Value = descripcion;
			
		
			
				SqlDataReader amd = cmd.ExecuteReader();			
		
			
				
				List<BERol> listaRol = new List<BERol>();
			
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							BERol beRol = new BERol();
							
							beRol.Rol = amd[0].ToString();
							beRol.Descripcion = amd[1].ToString();
							beRol.Estado = amd[2].ToString();
							
							listaRol.Add(beRol);
						}
						catch
						{
							System.Windows.Forms.MessageBox.Show("Error al obtener Rol","Error");
							amd.Close();
							return null;
						}
					}
					amd.Close();
	
					return listaRol;
				}
				else
				{
					amd.Close();
					return null;
				}
        	}
        	catch{
        		MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return null;
        	}
		}
        
       
        public int anularRol(string idRol){
        	try {
        		SqlCommand cmd = new SqlCommand("SEGU_ANULAR_ROL_T", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
			
				cmd.Parameters.Add("@IDROL", SqlDbType.Char, 3);
				cmd.Parameters["@IDROL"].Value = idRol;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
			
				int estadoTran;
			
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				
				return estadoTran;			
        	}
        	catch {
        		MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return 0;
        	}
    	}

    	public string buscarDescripcion ( string idRol){
        	try {
        		SqlCommand cmd = new SqlCommand("SEGU_BUSCAR_DESCRIPCION_T", ConnectionManager.getConnection());
        	
				cmd.CommandType = CommandType.StoredProcedure;
			
				cmd.Parameters.Add("@IDROL", SqlDbType.Char,3);
				cmd.Parameters["@IDROL"].Value = idRol;
				
				cmd.Parameters.Add("@DESCRIPCION", SqlDbType.Char,18);
				cmd.Parameters["@DESCRIPCION"].Direction = ParameterDirection.Output;
			
				SqlDataReader amd = cmd.ExecuteReader();			
		
				String descripcion ="";
			
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							descripcion = amd[1].ToString();
						}
						catch
						{
							System.Windows.Forms.MessageBox.Show("Error al obtener Descripcion","Error");
							amd.Close();
							return null;
						}
					}
					amd.Close();

					return descripcion;
				}	
				else
				{
					System.Windows.Forms.MessageBox.Show("No se encontro descripcion para el rol","Error");
					amd.Close();
					return null;
				}
        	}
        	catch {
        		MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return null;
        	}
        }
        
        public int buscarPrivilegio (String idRol,int i, string ventana, string modulo){
        	try {
        		SqlCommand cmd = new SqlCommand("SEGU_BUSCAR_PRIVILEGIOXROL2_T", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
			
				cmd.Parameters.Add("@IDROL", SqlDbType.Char,3);
				cmd.Parameters["@IDROL"].Value = idRol;
				cmd.Parameters.Add("@I", SqlDbType.Int);
				cmd.Parameters["@I"].Value = i;
				cmd.Parameters.Add("@VENTANA", SqlDbType.Char,4);
				cmd.Parameters["@VENTANA"].Value = ventana;
				cmd.Parameters.Add("@MODULO", SqlDbType.Char,4);
				cmd.Parameters["@MODULO"].Value = idRol;
	
				//System.Windows.Forms.MessageBox.Show("rOL: "+idRol+" idprivilegio: "+i+"VENTANA: "+ventana+" modulo: "+modulo,"Error");
			

				SqlDataReader amd = cmd.ExecuteReader();
			
				// 0 es falso, 1 verdadero, 2 o mas error
				
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							return 1;
						}
						catch
						{
							System.Windows.Forms.MessageBox.Show("Error al obtener Privilegio","Error");
							amd.Close();
							return 0;
						}
					}
					amd.Close();
				}
				else
				{
					//System.Windows.Forms.MessageBox.Show("No se encontro PRIVILEGIO para el rol","Error");
					amd.Close();
					return 0;
				}
				amd.Close();
				return 0;
        	}
        	catch {
        		MessageBox.Show("Error al conectar a base de datos. Comunicarse con Sistemas","Error");
        		return 0;
        	}
			
    	}
    }
}
